package com.lxw.nonghe.controller;

import com.lxw.nonghe.common.Result;
import com.lxw.nonghe.entity.UserRole;
import com.lxw.nonghe.service.UserRoleService;
import com.lxw.nonghe.util.LogUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * <p>
 * 用户角色关联表 前端控制器
 * </p>
 *
 * @author lxw
 * @since 2025-04-17
 */
@RestController
@RequestMapping("/userRole")
public class UserRoleController {
    @Autowired
    private UserRoleService userRoleService;

    @Autowired
    private LogUtils logUtils;

    /**
     * 添加用户角色关联信息
     */
    @PostMapping("/add")
    public Result<Boolean> addUserRole(@RequestBody UserRole userRole) {
        try {
            boolean result = userRoleService.save(userRole);
            if (result) {
                logUtils.recordLog("用户角色管理", "添加关联", "成功",
                        String.format("用户ID:%d 角色ID:%d", userRole.getUserId(), userRole.getRoleId()));
                return Result.success("用户角色关联添加成功", result);
            } else {
                logUtils.recordLog("用户角色管理", "添加关联", "失败",
                        String.format("用户ID:%d 角色ID:%d", userRole.getUserId(), userRole.getRoleId()));
                return Result.error("用户角色关联添加失败");
            }
        } catch (Exception e) {
            logUtils.recordLog("用户角色管理", "添加关联", "失败", e.getMessage());
            throw e;
        }
    }

    /**
     * 删除指定用户与角色的关联信息
     */
    @PostMapping("/delete")
    public Result<Boolean> deleteUserRole(@RequestParam Integer userId, @RequestParam Integer roleId) {
        try {
            UserRole userRole = new UserRole();
            userRole.setRoleId(roleId);
            userRole.setUserId(userId);
            boolean result = userRoleService.removeById(userRole);
            if (result) {
                logUtils.recordLog("用户角色管理", "删除关联", "成功",
                        String.format("用户ID:%d 角色ID:%d", userId, roleId));
                return Result.success("用户角色关联删除成功", result);
            } else {
                logUtils.recordLog("用户角色管理", "删除关联", "失败",
                        String.format("用户ID:%d 角色ID:%d", userId, roleId));
                return Result.error("用户角色关联删除失败");
            }
        } catch (Exception e) {
            logUtils.recordLog("用户角色管理", "删除关联", "失败", e.getMessage());
            throw e;
        }
    }

    /**
     * 修改用户角色关联信息
     */
    @PostMapping("/update")
    public Result<Boolean> updateUserRole(@RequestBody UserRole userRole) {
        try {
            boolean result = userRoleService.updateById(userRole);
            if (result) {
                logUtils.recordLog("用户角色管理", "更新关联", "成功",
                        String.format("关联ID:%d 用户ID:%d 角色ID:%d",
                                userRole.getId(), userRole.getUserId(), userRole.getRoleId()));
                return Result.success("用户角色关联修改成功", result);
            } else {
                logUtils.recordLog("用户角色管理", "更新关联", "失败",
                        String.format("关联ID:%d", userRole.getId()));
                return Result.error("用户角色关联修改失败");
            }
        } catch (Exception e) {
            logUtils.recordLog("用户角色管理", "更新关联", "失败", e.getMessage());
            throw e;
        }
    }

    /**
     * 查询所有用户角色关联信息
     */
    @GetMapping("/list")
    public Result<List<UserRole>> listUserRole() {
        try {
            List<UserRole> userRoles = userRoleService.list();
            /*logUtils.recordLog("用户角色管理", "查询所有关联", "成功", "查询全部用户角色关联");*/
            return Result.success("查询成功", userRoles);
        } catch (Exception e) {
            logUtils.recordLog("用户角色管理", "查询所有关联", "失败", e.getMessage());
            throw e;
        }
    }

    /**
     * 根据角色ID查询相关的用户角色关联信息
     */
    @GetMapping("/listByRoleId")
    public Result<List<UserRole>> listUserRolesByRoleId(@RequestParam Integer roleId) {
        try {
            List<UserRole> userRoles = userRoleService.lambdaQuery()
                    .eq(UserRole::getRoleId, roleId)
                    .list();
            /*logUtils.recordLog("用户角色管理", "按角色查询", "成功",
                    String.format("角色ID:%d", roleId));*/
            return Result.success("查询成功", userRoles);
        } catch (Exception e) {
            logUtils.recordLog("用户角色管理", "按角色查询", "失败", e.getMessage());
            throw e;
        }
    }
}
